---
title: '家庭网络搭建'
date: '2022-02-05'
tags: 
 - network
draft: false
summary: 家庭网络搭建指南
---

### 家庭服务搭建
想要外网可以访问家庭的服务器，就需要搭建服务器和获取外网可以访问ip。服务器可以使用linux系列的Debian、Ubuntu、centos（经典，但后续没有维护）等系统。ip分为ipv4和ipv6，ipv4是目前最常用的ip地址，但是ipv4数量有限并且在2019年的时候已经分配完了，而且购买一个ipv4需要额外费用。ipv6是国家比较推广的ip地址，目前已经开始普及，电信、移动和联通基本都支持。


#### 光猫桥接
其实光猫桥接和光猫直连没什么区别，只是光猫桥接可以实现光猫和路由器的连接，这样路由器就可以作为光猫的网关，实现光猫和路由器的连接。
建议进行光猫桥接，提高网络性能。
> 必备：准备一个路由器，一根网线，光猫桥接后就相当于简单的将光信号转化为电信号（数字信号）外加桥接时的配置，光猫之前的全部功能就得到释放。将光猫桥接后，光猫就可以作为路由器的网关，实现光猫和路由器的连接。

首先 通过宽带运营商提供的宽带账号密码登录光猫后台，然后进行光猫桥接设置。或者直接联系宽带运营商进行设置。还可以让宽带师傅帮你设置。

设置的时候注意：
- 要求设置ipv6模式：ipv4+ipv6，否则光猫桥接后路由器无法支持分配公网ipv6，即时路由支持分配ipv6地址。我们需要ipv6地址作为服务器的公网地址。

![移动电视](https://kodo.huixiangwuyou.com/blog/images/web/20250214151912.png)
![光猫桥接](https://kodo.huixiangwuyou.com/blog/images/web/20250214152008.png)




#### 服务域名
从阿里云、腾讯云、华为云等云厂商购买的服务器，一般会提供一个域名，用于访问服务器。然后再域名的dns解析设置中，添加一条记录，将域名解析到服务器的公网ip地址。这样就可以通过域名访问服务器了。若是没有ipv4地址，就需要将域名解析到服务器的公网ipv6地址。



#### 永久IPV6地址
首先要了解下ISP服务商提供的ipv6服务。   
<br/> 
![ISP服务商提供的ipv6服务](https://kodo.huixiangwuyou.com/blog/images/web/20250207000740.png) 
<br/>
<br/>
**注意**：首先路由器支持ipv6地址分配，否则服务器是不会生成ipv6地址。  
[配置遇到的坑](#设置的ipv6地址外网访问无效)  
配置 /etc/network/interfaces 的示例
```shell
# 自动启用 enp7s0 接口, enp7s0 为 ip addr show 命令中显示的有线接口名称
auto enp7s0

# IPv4 配置（设置静态本地ip）
iface enp7s0 inet static
    address 192.168.3.2
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-nameservers 8.8.8.8 8.8.4.4

# IPv6 配置（静态或动态）
iface enp7s0 inet6 static
    # 使用第一个全局 IPv6 地址
    address 2409:xxxx:xxxx:aaf0:80cc:1212:a023:2
    netmask 128

    # 使用第二个全局 IPv6 地址
    address 2409:xxxx:xxxx:aaf0:ed79:74bb:bd6a:8ae9
    netmask 64

    # 可以只设置一个ipv6地址，也可以设置多个ipv6地址。

    # 网关（通过 ip route show default或者 ip -6 route | grep default 获取）
    gateway 2409:xxxx:xxxx:aaf0::1

    # DNS 服务器（根据你的网络环境填写）
    dns-nameservers 2001:4860:4860::8888 2001:4860:4860::8844
# 配置动态 ipv6
iface eth0 inet6 dhcp
# 阿里dns 服务器
dns-nameservers 2400:3200::1 2400:3200:baba::1


# 查看网卡 
cat /etc/resolv.conf
# 查看网卡信息
```

`sudo systemctl restart networking` 重启网络服务。

**注意**：如果重启后ipv6地址没有生成，可能是因为没有安装ifupdown工具。

```shell
# 确保 ifupdown 工具已安装
sudo apt install ifupdown
# 在重启服务器之前，手动测试配置是否生效：
sudo ifdown enp7s0
sudo ifup enp7s0
ip link set enp7s0 up

sudo systemctl restart networking

# 检查IPv6地址
ip -6 addr show dev enp7s0

# 检查 ufw 是否支持 IPv6
sudo nano /etc/default/ufw
# 放行IPV6流量  
IPV6=yes


# SSH 配置支持 IPv6
sudo nano /etc/ssh/sshd_config
# 添加以下内容
AddressFamily inet6
ListenAddress ::
ListenAddress 0.0.0.0
```

防止临时IPv6地址生成
```shell
sudo nano /etc/sysctl.conf

# 添加以下内容 设置ipv6地址和ipv6网关是静态
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0

net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.default.use_tempaddr = 0
net.ipv6.conf.enp7s0.use_tempaddr = 0

# 禁用接受路由器通告 注意会影响ping ipv6 地址
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.enp7s0.accept_ra = 0

# 禁用自动配置
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.enp7s0.autoconf = 0
# 保存并退出 执行配置
sudo sysctl -p 

# 查看ipv6配置
sudo sysctl net.ipv6
# 查看刚刚的配置
sudo sysctl net.ipv6.conf.enp7s0

sudo systemctl restart networking

# 重启服务
sudo reboot  
```

```shell
# 允许 HTTP
sudo ufw allow 80/tcp
# 允许 HTTPS
sudo ufw allow 443/tcp
sudo ufw allow 8080/tcp
sudo ufw allow 10086/tcp

# 查看防火墙状态、规则
sudo ufw status verbose

允许 ICMPv6 回显请求（用于 ping6 操作）
sudo ufw allow in icmpv6 type echo-request





385  sudo ufw allow in proto ipv6-icmp
387  sudo apt install tcpdump
388  sudo tcpdump -i enp7s0 icmp6
426  sudo journalctl -xe

history -c  # 清除历史记录, 但是不会清除当前终端的历史记录
> ~/.bash_history # 清除历史记录，但是不会清除当前终端的历史记录
rm ~/.bash_history # 清除历史记录，但是不会清除当前终端的历史记录
```



### 常见问题


#### 链接超时或出错
1. tabby输入局域网ip，显示连接超时：  
解决办法：
- 在输入的ip前面加账户名：root@192.168.1.3
- 拔掉路由器电源重新连接：替换路由器可能引起的问题


#### 设置的ipv6地址外网访问无效

设置好固定IPV6地址后，在一些测试网站 [http://ipv6-test.ch/](http://ipv6-test.ch/)、 [https://v6.qjcq.net](https://v6.qjcq.net) 去测试，发现没问题，但是外网访问无效，就是移动网络 ping IPV6地址无法ping通，或者在阿里域名解析设置好IPV6地址进行生效检测，进行ping测试的时候丢包100%。  
思考：
- 在测试网站测试没问题，ISP运营商网络基本没问题，现在基本都提供了IPV6网络地址。
- 路由器也是支持IPV6网络的设置的，部分老旧路由器不支持IPV6设置，但是可以进行路由器刷机，例如刷个openWrt。
- 路由器和电脑的防火墙都是关闭的

后来在百度上搜索到光猫也是需要关闭IPV6防火墙的
![IPV6防火墙](https://kodo.huixiangwuyou.com/blog/images/web/20250214152411.png)

但是还是不行，最后在百度上搜索到了一个解决方案，修改两个光猫配置。

![lan端设置](https://kodo.huixiangwuyou.com/blog/images/web/20250214152106.png)
![lan端设置](https://kodo.huixiangwuyou.com/blog/images/web/20250214152242.png)

可能是光猫的问题，在桥接后和路由器的DHCP冲突了，需要修改光猫的配置。然后重启下路由器，然后外网访问就可以了。在阿里云的域名生效检测也没有问题。
**备注**：后来发现路由器的防火墙和服务器防火墙可以不关闭，服务器的防火墙开发对应的web访问端口即可。


> 后续发现固定ipv6地址后，因为获取的ipv6是动态获取然后设置的。移动这边就会设置时效性。导致域名绑定的ipv6无效。后面无奈的用了ddns-go的动态域名解析方式，ip变化更新解析地址。


### ddns-go

[ddns-go 文档](https://github.com/jeessy2/ddns-go) 安装方式有两种，一种是docker，一种是二进制文件。docker安装相对快捷和方便。
服务器端运行ddns-go要设置开机启动，在启动容器的时候设置 `--restart=always`

使用方式：
1. 打开运行的电脑的ip地址：http://localshot:9876。
2. 选择对应的域名解析服务商，上传AccessKey ID和AccessKey Secret。
3. 勾选IPV6 ,在Domains添加域名，然后保存就可以自动更新域名解析的ip地址了。

![ddns-go](https://kodo.huixiangwuyou.com/blog/images/web/20250609145114.png)
![ddns-go](https://kodo.huixiangwuyou.com/blog/images/web/20250609145214.png)


#### 远程电脑修改

服务器放在家里不能再外地随时访问电脑的ddns-go，要用到 nginx 代理端口，要在DNS服务商配置一个子域名代理，因为在外网访问服务器电脑不是直接打开ddns-go的设置页面，而是默认打开登录页面，这时候就会出现404页面（因为是宿主机的登录页是没有配置的，当然也可以自行配置登录页路径）。
docker模式的登录页默认账户是root，密码要在配置里面查找，要执行如下步骤：
- 进入容器：`docker exec -it ddns-go sh`
- 修改配置文件：`nano /root/.ddns-go_config.yaml` ,nano 要自行安装 `apk update`、 `apk add nano`
  - 可以修改账户密码和域名
- 保存配置然后 `docker restart ddns-go` 重启容器  

![ddns-go 配置](https://kodo.huixiangwuyou.com/blog/images/web/20250609151332.png)


#### ssh修改

除了上面的配置文件修改，还可以通过ssh远程修改配置文件，修改配置文件后重启容器。

```shell
ssh -L 9876:localhost:9876 root@[服务器IP] -p 22

# 这样就可以在本地电脑使用 http://localhost:9876 访问ddns-go的配置页面了
```